import type { IFrame, IStroke, ITextAlign, IVerticalAlign } from 'leafer-ui'

/*
 * @Author: '浪川' '1214391613@qq.com'
 * @Date: 2025-07-09 10:54:53
 * @LastEditors: '浪川' '1214391613@qq.com'
 * @LastEditTime: 2025-08-08 16:14:49
 * @FilePath: \passiflora-edulis-sims\src\interfaces\IBook.ts
 * @Description:
 *
 * Copyright (c) 2025 by '1214391613@qq.com', All Rights Reserved.
 */
// 单位的名称
export type IUnit = 'in' | 'cm' | 'mm' | 'px'
/**
 * @property `width`: 宽度 单位 英寸
 * @property `height`: 高度 单位 英寸
 * @property `ppi`: 像素 / 英寸
 */
export interface ICanvas {
  width: number //
  height: number // 高度 单位 英寸
  unit: IUnit
  ppi: number // 像素 / 英寸
}
/**
 * @property ``
 * @property ``
 * @property ``
 * @property ``
 * @property ``
 * @property ``
 * @property ``
 */
export interface IBook {
  id: number
  name: string
  create_data: number
  children: Ipage[]
}

export type GameType =
  | 'Crossword'
  | 'Maze'
  | 'Sudoku'
  | 'WordSearch'
  | 'DoublePuzzle'
  | 'MissingLetters'
  | 'Crypotgram'
  | 'WordMatch'
/**
 * 字体接口，为了防止 过度使用 Leaferjs 的 组件 采取自封装
 * @property string `font_name`: 字体名
 * @property number `font_size`: 字体大小
 * @property string `font_color`: 字体颜色
 * @property ``
 * @property ``
 * @property ``
 * @property ``
 */
export interface IFont {
  font_name: string
  font_size: number
  font_color: string
}

export interface IFontInfo {
  name: string
  path: string
}
/**
 * 文字接口，例如标题文字的属性
 * @property number `width?`: 宽度，可选
 * @property number `height?`: 高度可选
 * @property string `text`: 文字内容
 * @property IFont  `font`: 字体接口
 * @property `text_align`: 文字水平方向
 * @property `vertical_align` 文字垂直方向
 * @property number `offet_x`: 在x轴偏移量 从左往右
 * @property number `offet_y`: 在y轴偏移量 从上往下
 * @property ``
 */
export interface IText {
  width?: number
  height?: number
  text: string
  font: IFont
  text_align: ITextAlign
  vertical_align: IVerticalAlign
  offet_x: number
  offet_y: number
}
/**
 * @property `shape`: 方框的类型，圆或者方形
 * @property number `text`: 内嵌文字
 * @property number `width`: 宽度
 * @property number `heigh`: 高度
 * @property number `x_interval`: 每个方框在 x 轴上的间隔
 * @property number `y_interval`: 每个方框在 y 轴上的间隔
 * @property number `offet_x`: 每个方框在 x 的相对于前一个方框的偏移量
 * @property number `offet_y`: 每个方框在 y 的相对于前一个方框的偏移量
 * @property IStroke `stroke`: 方框的 框属性（描边) leaferjs的类型
 */
export interface IGrid {
  shape: 'round' | 'boxed'
  text: IText | undefined
  width: number
  height: number
  x_interval: number
  y_interval: number
  offet_x: number
  offet_y: number
  stroke?: IStroke
}
/**
 * 每本书的每一页的抽象接口
 * @property string `type`: 每一页的游戏类型
 * @property IText `title`: 每一页的对象
 * @property IText `instruction`: 副标题对象
 * @property number `page_no`: 页码
 * @property GameType `game_name`: 游戏名称
 * @property IGrid `grid`: 方框类型
 * @property string[] `grid_list`: 方框内容列表
 * @property IFrame `topic_frame`: 问题容器
 * @property IFrame `answer_frame`: 答案容器
 *
 */
export interface Ipage {
  type: string
  title: IText
  instruction: IText
  page_no: number // 页码
  game: GameType

  word_list: string[]

  topic_frame?: IFrame | undefined // LeaferJS 的数组
  answer_frame?: IFrame | undefined // LeaferJS 的数组
}
